import cv2 as cv

filename = r'F:\lena.jpg'
img = cv.imread(filename)

# Sobel算子边缘检测,分别对x，和y方向计算梯度
sobel_x=cv.Sobel(img, -1, 1, 0, ksize=3)
sobel_y=cv.Sobel(img, -1, 0, 1, ksize=3)

#经过卷积之后，会出现溢出的问题，需要转换
sobel_abs_x = cv.convertScaleAbs(sobel_x)
sobel_abs_y = cv.convertScaleAbs(sobel_y)
sobel = cv.addWeighted(sobel_abs_x, 0.5, sobel_abs_y, 0.5, 0)

# Canny算子边缘检测,最小阈值50，最大阈值150
canny = cv.Canny(img, 50, 150)

cv.imshow('Source image', img)
cv.imshow('sobel image', sobel)
cv.imshow('canny image', canny)

cv.waitKey()
cv.destroyAllWindows()
